<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .father {
        width: 300px;
        height: 300px;
        background: green;
      }
      .son {
        width: 150px;
        height: 150px;
        background: blue;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <h2>事件修饰符</h2>
      <div class="father" v-on:click="fatherClick">
        <!-- .stop修饰符表示阻止事件冒泡 -->
        <div class="son" v-on:click.stop="sonClick"></div>
      </div>

      <hr />

      <!-- .prevent修饰符表示阻止默认行为 -->
      <form v-on:submit.prevent="onSubmit">
        <input type="text" />
        <input type="submit" />
      </form>

      <!-- 
        其他修饰符:
          self
          capture
          once
          passive
      -->

      <hr />

      <h5>change事件</h5>
      <!-- 只有内容改变并失去焦点，才会触发change事件 -->
      <input type="text" v-on:change="handleChange" />

      <h5>input事件</h5>
      <!-- input事件只要内容改变就会触发 -->
      <input type="text" v-on:input="handleInput" />

      <h5>键盘事件</h5>
      <!-- .enter表示只能按下回车键有用 -->
      <!-- 
        常见的按键码还有
          .enter
          .tab
          .delete (捕获“Delete”和“Backspace”两个按键)
          .esc
          .space
          .up
          .down
          .left
          .right
       -->
      <input type="text" v-on:keyup.enter="handleKeyup" />
      <!-- vue3里面只能使用.enter -->
      <!-- 在vue2里面可以使用.enter和.13 -->

      <hr />

      <!-- 
        常见的系统修饰符还有
          .ctrl
          .alt
          .shift
          .meta
       -->
      <button v-on:click.ctrl="fn">系统修饰符</button>
    </div>

    <script src="./lib/vue3.js"></script>
    <script>
      const { createApp } = Vue;

      createApp({
        data() {
          return {};
        },
        methods: {
          fatherClick() {
            console.log("fatherClick");
          },
          sonClick() {
            // 传统的阻止事件冒泡的方式
            // e.stopPropagation();
            console.log("sonClick");
          },
          onSubmit() {
            // 传统的阻止默认行为的方式
            // e.preventDefault();
            console.log("提交了");
          },
          handleChange(e) {
            console.log(e.target.value);
          },
          handleInput(e) {
            console.log(e.target.value);
          },
          handleKeyup(e) {
            // 最新的h5规范中，删除了按键码
            // if (e.keyCode === 13) {
            //   console.log(e.target.value);
            // }
            // if (e.key === "Enter") {
            //   console.log(e.target.value);
            // }
            console.log(e.target.value);
          },
          fn() {
            console.log("fn");
          },
        },
      }).mount("#app");
    </script>
  </body>
</html>
